package com.strive.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;

/**
 * 返回实体的同时，在前端表单提交后，判断一些必要的选项不能为空
 * 添加了一些检验的规则
 *
 * @author strive.Peng
 * @since 2024-03-14
 */
@Data
@EqualsAndHashCode(callSuper = true) // 自动生成equals和hashCode
public class SysMenu extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 父菜单ID，一级菜单为0
     */
    @NotNull(message = "上级菜单不能为空") // 判断该项属性是否为空 字符串使用NotBlank 其他类型使用 NotNull
    private Long parentId;

    @NotBlank(message = "菜单名称不能为空")
    private String name;

    /**
     * 菜单URL
     */
    private String path;

    /**
     * 授权(多个用逗号分隔，如：user:list,user:create)
     */
    @NotBlank(message = "菜单授权信息不能为空")
    private String perms;

    private String component;

    /**
     * 类型     0：目录   1：菜单   2：按钮
     */
    @NotNull(message = "菜单类型不能为空")
    private Integer type;

    /**
     * 菜单图标
     */
    private String icon;

    /**
     * 排序
     */
    @TableField("orderNum")
    private Integer orderNum;

    // 添加一个子类
    @TableField(exist = false) // 高度MybatisPlus这个字段数据在表里是不存在的
    private List<SysMenu> children = new ArrayList<>();


}
